#ifndef CLIENTE_H_
#define CLIENTE_H_

#include <list>
#include <cstring>
#include <sstream>
#include <Cola.h>
#include <mensajes.h>
#include "Persona.h"
#include "exceptions/ValorInvalidoException.h"
#include "exceptions/ErrorGestorException.h"


using namespace std;
using namespace mensajes;
class Cliente {
public:
	virtual ~Cliente();
	const list<Persona> * realizarBusqueda(criterio_busqueda critBusq, tipo_condicion cond, string valor);
	void insertarPersona(Persona persona);
	string actualizarPersona(criterio_busqueda criterio, tipo_condicion tipoCondicion, string valorSeleccion, criterio_busqueda columnaActualizar, string nuevoValor);
	string borrarPersona(criterio_busqueda criterio, tipo_condicion critComp, string valorSeleccion);
	static Cliente * getInstance();
	static void destroy();

private:
	Cliente(const char * archivo, char letraPeticion, char letraRespuesta);
	list<Persona> resultadoBusqueda;
	Cola<ConsultaType> colaPeticion;
	Cola<RespuestaType> colaRespuesta;
	static Cliente * instance;
	int id;

};

#endif /* CLIENTE_H_ */
